/*
 * kogis.h
 *
 * Copyright (C) 2008, 2009
 *
 * Lukasz Bieniasz-Krzywiec
 * Dariusz Leniowski
 *
 * glowny plik naglowkowy
 */

#ifndef KOGIS_H_
#define KOGIS_H_

#include "config.h"

/*
 * DEFINICJE TYPOW:
 */

#include "moduly/random.h"
#include "moduly/historia.h"
#include "moduly/reputacja.h"
#include "moduly/osobnik.h"
#include "moduly/fabryka.h"
#include "moduly/fwwk.h"
#include "moduly/fitness.h"
#include "moduly/selekcja.h"

/*
 * DEFINICJE ZMIENNYCH GLOBALNYCH:
 */

/* Rozmiar populacji */
extern int      N;

/* Rozmiar historii */
extern int      M;

/* Liczba epok */
extern int      TIME;

/* Liczba rodzajow osobnikow */
extern int      RODZAJOW;

/* Rozwazane rodzaje osobnikow */
extern int      *RODZAJE;
extern int			RODZAJE_REF[MAX_RODZAJOW+1];

/* Definicja modelu */
extern int      RANDOM;
extern int      FWWK;
extern int      REPUTACJA;
extern int      FITNESS;
extern int      SELEKCJA;

extern int      ILE_WIERZCHOLKOW;
extern int      ILE_SASIADOW;

extern int      RODZAJ_SYMULACJI;

/* Czas */
extern int      time;

/* Symulowana gra  */
extern real     gra[2][2];

/* Populacja osobnikow */
extern osobnik  **populacja;

/* Permutacja przypisujaca osobnikowi jego numer w ciagu posortowanym po fitnessie */
extern int      *osobnik_fitness;

/* Permutacja odwrotna do poprzedniej */
extern int      *fitness_osobnik;

/* Licznik ile osobnikow mamy kazdego rodzaju */
extern int      rodz[MAX_RODZAJOW+1];

/* Generator liczb pseudolosowych */
extern rnd      *r;

/* Funkcja wyboru wagi krawedzi */
extern fwwk     *f;

/* Fitness */
extern fitness  *fit;

/* Selekcja */
extern selekcja *sel;

/* Graf */
extern graf    * grf;

#endif /* KOGIS_H_ */
